package com.xunk.scene.domain;

import com.xunk.common.core.annotation.EnumCheck;
import com.xunk.common.core.annotation.Excel;
import com.xunk.common.core.web.domain.BaseEntity;
import com.xunk.scene.enums.CompareOperatorEnum;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.NoArgsConstructor;
import lombok.ToString;

import javax.validation.constraints.NotBlank;
import javax.validation.constraints.NotNull;
import java.io.Serializable;


/**
 * @ProjectName: HIM
 * @Package: com.xunk.scene.domain
 * @ClassName: EquipmentCondition
 * @Author: luanzhiwei
 * @Description: 设备属性条件表实体类
 * @Date: 2021/5/6 10:26
 * @Version: 1.0
 */
@Data
@NoArgsConstructor
@ToString
@EqualsAndHashCode
public class SceneConditionEquipment extends BaseEntity implements Serializable {
    private static final long serialVersionUID = 1L;

    /**
     * 自增主键
     */
    private Long id;

    /**
     * 场景id
     */
    @Excel(name = "场景id")
    @NotNull(message = "场景ID不能为空", groups = {Add.class, Model.class})
    private Long sceneId;

    /**
     * 设备类型
     */
    @Excel(name = "设备类型")
    @NotBlank(message = "设备类型不能为空", groups = {Add.class, Model.class})
    private String deviceType;

    /**
     * 设备id
     */
    @Excel(name = "设备id")
    private String deviceSn;

    /**
     * 设备属性
     */
    @Excel(name = "设备属性")
    @NotBlank(message = "设备属性不能为空", groups = {Add.class, Model.class})
    private String deviceProp;

    /**
     * 对比关系,大于GT,小于LT,介于BT,等于EQ
     */
    @Excel(name = "对比关系,大于GT,小于LT,介于BT,等于EQ")
    @NotBlank(message = "对比关系不能为空", groups = {Add.class, Model.class})
    @EnumCheck(enableClass = CompareOperatorEnum.class)
    private String compare;

    /**
     * 设备属性值,如果为区间值，需要用中划线"-"分割，例如10-12
     */
    @Excel(name = "设备属性值")
    @NotBlank(message = "设备属性值不能为空", groups = {Add.class, Model.class})
    private String propValue;

    /**
     * 属性描述，例如开关:打开
     */
    private String propDescription;
    /**
     * 房间名称
     */
    private String roomName;
    /**
     * 设备名称，例如空调
     */
    private String deviceName;

    /**
     * 是否必要（预留 跟条件分组id配合使用，该分组条件下，子条件之间的关系）
     * 0 匹配一条 1 全部匹配
     */
    @Excel(name = "是否必要", readConverterExp = "预留")
    private String essentialFlag;

    /**
     * 条件分组id，预留，用于同一场景条件下使用。
     * 例如，条件1： 17点到19点 + 门锁打开 或 定位在家中。条件2:8点到9点+ 床头灯打开。这是一个场景下的两组条件
     */
    private String tranche;

    /**
     * 删除标识,0正常1删除
     */
    private String delFlag;


    public interface Add {
        //校验分组，添加
    }

    public interface Model {
        //设置模板
    }
}
